package br.edu.universo.si.projeto2.infojob.client.apresentacao;

import br.edu.universo.si.projeto2.infojob.client.bean.BeanVaga;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.ErrorDialogBox;
import br.edu.universo.si.projeto2.infojob.client.util.Util;

import com.google.gwt.user.client.WindowResizeListener;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class ADetalhesVaga extends DockPanel implements WindowResizeListener
{
	private VerticalPanel vPanel;
	private HorizontalPanel opcoesVagaPanel;

	private FlexTable detalhesGrid;
	
	private Button enviaCurriculoBtn;
	private Button enviarMensagemBtn;

	public ADetalhesVaga(Integer idVaga)
	{
		detalhesGrid = new FlexTable();
		detalhesGrid.setWidget(0, 0, new HTML("DETALHES DA VAGA"));
		detalhesGrid.getFlexCellFormatter().setAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE);
		detalhesGrid.setWidth("900px");
		detalhesGrid.setCellSpacing(0);
		detalhesGrid.setCellPadding(5);
		detalhesGrid.getFlexCellFormatter().setStyleName(0, 0, "detalhesVagaGridTitulo");

		vPanel = new VerticalPanel();
		vPanel.setWidth("100%");
		
	    opcoesVagaPanel = new HorizontalPanel();
		opcoesVagaPanel.setSpacing(5);

		enviaCurriculoBtn = new Button("Enviar Currículo");
		enviarMensagemBtn = new Button("Enviar mensagem");

		opcoesVagaPanel.add(enviaCurriculoBtn);
		opcoesVagaPanel.add(enviarMensagemBtn);
		
		AsyncCallback<BeanVaga> cbDetalhesVaga = new AsyncCallback<BeanVaga>()
		{
			public void onSuccess(final BeanVaga vaga)
			{
				if (vaga.getDataCriacao() != null)
				{
					vPanel.add(new HTML("Abertura da vaga: " + vaga.getDataCriacao()));
				}

				if (vaga.getBEmpresaAssinante() != null)
				{
					if (vaga.getBEmpresaAssinante().getRazaoSocial() != null)
					{
						vPanel.add(new HTML("Empresa: " + vaga.getBEmpresaAssinante().getRazaoSocial()));
					}
					if (vaga.getBEmpresaAssinante().getResponsavel() != null)
					{
						vPanel.add(new HTML("Responsável pela Empresa: " + vaga.getBEmpresaAssinante().getResponsavel()));
					}
					if (vaga.getBEmpresaAssinante().getTelefone() != null)
					{
						vPanel.add(new HTML("Telefone da Empresa: " + vaga.getBEmpresaAssinante().getTelefone()));
					}
					if (vaga.getBEmpresaAssinante().getEmail() != null)
					{
						vPanel.add(new HTML("E-Mail da empresa: " + vaga.getBEmpresaAssinante().getEmail()));
					}
				}

				vPanel.add(new HTML("-------------------------------------------------------------------------"));

				if (vaga.getCargo() != null)
				{
					vPanel.add(new HTML("Cargo: " + vaga.getCargo()));	
				}

				if (vaga.getCargaHorariaSemanal() != null)
				{
					vPanel.add(new HTML("Horas semanais: " + vaga.getCargaHorariaSemanal()));					
				}
				
				if (vaga.getRemuneracao() != null)
				{
					vPanel.add(new HTML("Remuneração: " + vaga.getRemuneracao()));
				}

				if (vaga.getBTitularidade() != null)
				{
					vPanel.add(new HTML("Titularidade: " + vaga.getBTitularidade().getTitularidade()));
				}
				
				if (vaga.getAtribuicoes() != null)
				{
					vPanel.add(new HTML("Atribuições: " + vaga.getAtribuicoes()));
				}

				if (vaga.getBEstado() != null)
				{
					vPanel.add(new HTML("Localização da vaga (cidade/estado): " + vaga.getCidade() + "/" + vaga.getBEstado().getEstado()));
				}

				if (vaga.getExperiencia() != null)
				{
					vPanel.add(new HTML("Experiência: " + vaga.getExperiencia() + " ano(s)."));
				}

				if (vaga.getRequisitos() != null)
				{
					vPanel.add(new HTML("Requisitos: " + vaga.getRequisitos()));
				}

				detalhesGrid.setWidget(1, 0, vPanel);
				detalhesGrid.getFlexCellFormatter().setStyleName(1, 0, "detalhesVaga");

				// ENVIAR CURRICULO...
				enviaCurriculoBtn.addClickListener(
						new ClickListener()
						{
							public void onClick(Widget sender)
							{
								AEnviaCurriculo viewEnviaCurriculo = new AEnviaCurriculo(vaga);
								viewEnviaCurriculo.center();
								viewEnviaCurriculo.show();
							}
						}
				);
				
				// ENVIAR MENSAGEM
				enviarMensagemBtn.addClickListener(
						new ClickListener()
						{
							public void onClick(Widget sender)
							{
								ANovaMensagem viewNovaMensagem = new ANovaMensagem(vaga.getBEmpresaAssinante().getId());

								viewNovaMensagem.center();
								viewNovaMensagem.show();
							}
						}
				);
			};

			public void onFailure(Throwable caught)
			{
				ErrorDialogBox errorDialogBox = new ErrorDialogBox("Erro ao buscar detalhes da vaga: " + caught.getMessage());
				errorDialogBox.center();
				errorDialogBox.show();
			};
		};

		this.add(detalhesGrid, DockPanel.CENTER);
		this.add(opcoesVagaPanel, DockPanel.SOUTH);

		Util.getService().getVagaById(idVaga, cbDetalhesVaga);
	}

	public void onWindowResized(int width, int height) {
		int largura = width - this.getAbsoluteLeft() - 9;
		if(largura < 1){
			largura = 1;
		}
		int altura = height - this.getAbsoluteTop() - 9;
		if(altura < 1){
			altura = 1;
		} else {
			altura = detalhesGrid.getOffsetHeight();
		}			
		this.setPixelSize(largura, altura);		
	}
	
	}